PHP - Gestion des attaques courantes (injection SQL, XSS, CSRF)

Header :

Dans le développement web, il est crucial de protéger votre application contre les attaques courantes telles que l'injection SQL, XSS (Cross-Site Scripting) et CSRF (Cross-Site Request Forgery). Voici comment vous pouvez prévenir ces attaques en PHP :


Body

Injection SQL

Maintenant que vous connaissez un peu mieux la communication avec la base de données, nous allons revoir ce point en vitesse :

Les attaques par injection SQL surviennent lorsque des données non filtrées sont intégrées directement dans des requêtes SQL, permettant aux attaquants d'exécuter des commandes SQL malveillantes. Pour prévenir les injections SQL :

  • Utilisez les requêtes préparées avec des paramètres liés pour passer des données dans les requêtes SQL.
  • Évitez de concaténer des variables directement dans les requêtes SQL.
  • Utilisez les fonctions de filtrage et d'échappement des données fournies par PDO ou MySQLi.
$requete = $bdd->prepare("SELECT * FROM utilisateurs WHERE id = :id");
$requete->bindParam(':id', $id, PDO::PARAM_INT);
$requete->execute();

Cross-Site Scripting (XSS)

Les attaques XSS surviennent lorsque des données non filtrées sont intégrées dans des pages web et exécutent du code JavaScript malveillant côté client. Pour prévenir les attaques XSS :

  • Échappez les données affichées dans les pages HTML en utilisant les fonctions htmlspecialchars() ou htmlentities().
  • Limitez l'utilisation des cookies en utilisant l'attribut HttpOnly pour les cookies sensibles.
echo htmlspecialchars($donnees['nom'], ENT_QUOTES, 'UTF-8');

Cross-Site Request Forgery (CSRF)

Les attaques CSRF surviennent lorsque des actions non autorisées sont effectuées à partir d'un site web auquel l'utilisateur est connecté. Pour prévenir les attaques CSRF :

  • Utilisez des jetons CSRF pour chaque action sensible et vérifiez-les lors de la soumission de formulaires.
  • Implémentez des en-têtes HTTP de vérification de l'origine pour vérifier que les requêtes proviennent du même domaine.
// Génération d'un jeton CSRF
$jeton_csrf = bin2hex(random_bytes(32));
$_SESSION['jeton_csrf'] = $jeton_csrf;

// Ajout du jeton CSRF au formulaire
<input type="hidden" name="jeton_csrf" value="<?php echo $jeton_csrf; ?>">

// Vérification du jeton CSRF lors de la soumission du formulaire
if ($_POST['jeton_csrf'] !== $_SESSION['jeton_csrf']) {
    // Jeton CSRF invalide, rejeter la requête
    exit('Jeton CSRF invalide');
}

Conclusion

En suivant les bonnes pratiques de sécurité en PHP et en mettant en œuvre des mesures de prévention des attaques courantes telles que l'injection SQL, XSS et CSRF, vous pouvez garantir la sécurité de votre application web et protéger les données de vos utilisateurs contre les accès non autorisés et les manipulations malveillantes.